home *** CD-ROM | disk | FTP | other *** search
Text File | 1990-02-21 | 47.6 KB | 1,255 lines |
- Info file cpp.info, produced by Makeinfo, -*- Text -*- from input
- file cpp.texinfo.
-
- This file documents the GNU C Preprocessor.
-
- Copyright (C) 1987, 1989 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
- manual provided the copyright notice and this permission notice are
- preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
- this manual under the conditions for verbatim copying, provided also
- that the entire resulting derived work is distributed under the terms
- of a permission notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
- manual into another language, under the above conditions for modified
- versions.
-
-
- File: cpp.info, Node: Top, Next: Global Actions, Up: (DIR)
-
- The C Preprocessor
- ******************
-
- The C preprocessor is a "macro processor" that is used automatically
- by the C compiler to transform your program before actual
- compilation. It is called a macro processor because it allows you to
- define "macros", which are brief abbreviations for longer constructs.
-
- The C preprocessor provides four separate facilities that you can use
- as you see fit:
-
- * Inclusion of header files. These are files of declarations that
- can be substituted into your program.
-
- * Macro expansion. You can define "macros", which are
- abbreviations for arbitrary fragments of C code, and then the C
- preprocessor will replace the macros with their definitions
- throughout the program.
-
- * Conditional compilation. Using special preprocessor commands,
- you can include or exclude parts of the program according to
- various conditions.
-
- * Line control. If you use a program to combine or rearrange
- source files into an intermediate file which is then compiled,
- you can use line control to inform the compiler of where each
- source line originally came from.
-
- C preprocessors vary in some details. This manual discusses the GNU
- C preprocessor, the C Compatible Compiler Preprocessor. The GNU C
- preprocessor provides a superset of the features of ANSI Standard C.
-
- ANSI Standard C requires the rejection of many harmless constructs
- commonly used by today's C programs. Such incompatibility would be
- inconvenient for users, so the GNU C preprocessor is configured to
- accept these constructs by default. Strictly speaking, to get ANSI
- Standard C, you must use the options `-trigraphs', `-undef' and
- `-pedantic', but in practice the consequences of having strict ANSI
- Standard C make it undesirable to do this. *Note Invocation::.
-
- * Menu:
-
- * Global Actions:: Actions made uniformly on all input files.
- * Commands:: General syntax of preprocessor commands.
- * Header Files:: How and why to use header files.
- * Macros:: How and why to use macros.
- * Conditionals:: How and why to use conditionals.
- * Combining Sources:: Use of line control when you combine source files.
- * Other Commands:: Miscellaneous preprocessor commands.
- * Output:: Format of output from the C preprocessor.
- * Invocation:: How to invoke the preprocessor; command options.
- * Concept Index:: Index of concepts and terms.
- * Index:: Index of commands, predefined macros and options.
-
-
- File: cpp.info, Node: Global Actions, Next: Commands, Prev: Top, Up: Top
-
- Transformations Made Globally
- =============================
-
- Most C preprocessor features are inactive unless you give specific
- commands to request their use. (Preprocessor commands are lines
- starting with `#'; *note Commands::.). But there are three
- transformations that the preprocessor always makes on all the input
- it receives, even in the absence of commands.
-
- * All C comments are replaced with single spaces.
-
- * Backslash-Newline sequences are deleted, no matter where. This
- feature allows you to break long lines for cosmetic purposes
- without changing their meaning.
-
- * Predefined macro names are replaced with their expansions (*note
- Predefined::.).
-
- The first two transformations are done *before* nearly all other
- parsing and before preprocessor commands are recognized. Thus, for
- example, you can split a line cosmetically with Backslash-Newline
- anywhere (except when trigraphs are in use; see below).
-
- /*
- */ # /*
- */ defi\
- ne FO\
- O 10\
- 20
-
- is equivalent into `#define FOO 1020'. You can split even an escape
- sequence with Backslash-Newline. For example, you can split
- `"foo\bar"' between the `\' and the `b' to get
-
- "foo\\
- bar"
-
- This behavior is unclean: in all other contexts, a Backslash can be
- inserted in a string constant as an ordinary character by writing a
- double Backslash, and this creates an exception. But the ANSI C
- standard requires it. (Strict ANSI C does not allow Newlines in
- string constants, so they do not consider this a problem.)
-
- But there are a few exceptions to all three transformations.
-
- * C comments and predefined macro names are not recognized inside
- a `#include' command in which the file name is delimited with
- `<' and `>'.
-
- * C comments and predefined macro names are never recognized
- within a character or string constant. (Strictly speaking, this
- is the rule, not an exception, but it is worth noting here
- anyway.)
-
- * Backslash-Newline may not safely be used within an ANSI
- ``trigraph''. Trigraphs are converted before Backslash-Newline
- is deleted. If you write what looks like a trigraph with a
- Backslash-Newline inside, the Backslash-Newline is deleted as
- usual, but it is then too late to recognize the trigraph.
-
- This exception is relevant only if you use the `-trigraphs'
- option to enable trigraph processing. *Note Invocation::.
-
-
- File: cpp.info, Node: Commands, Next: Header Files, Prev: Global Actions, Up: Top
-
- Preprocessor Commands
- =====================
-
- Most preprocessor features are active only if you use preprocessor
- commands to request their use.
-
- Preprocessor commands are lines in your program that start with `#'.
- The `#' is followed by an identifier that is the "command name". For
- example, `#define' is the command that defines a macro. Whitespace
- is also allowed before and after the `#'.
-
- The set of valid command names is fixed. Programs cannot define new
- preprocessor commands.
-
- Some command names require arguments; these make up the rest of the
- command line and must be separated from the command name by
- whitespace. For example, `#define' must be followed by a macro name
- and the intended expansion of the macro.
-
- A preprocessor command cannot be more than one line in normal
- circumstances. It may be split cosmetically with Backslash-Newline,
- but that has no effect on its meaning. Comments containing Newlines
- can also divide the command into multiple lines, but the comments are
- changed to Spaces before the command is interpreted. The only way a
- significant Newline can occur in a preprocessor command is within a
- string constant or character constant. Note that most C compilers
- that might be applied to the output from the preprocessor do not
- accept string or character constants containing Newlines.
-
- The `#' and the command name cannot come from a macro expansion. For
- example, if `foo' is defined as a macro expanding to `define', that
- does not make `#foo' a valid preprocessor command.
-
-
- File: cpp.info, Node: Header Files, Next: Macros, Prev: Commands, Up: Top
-
- Header Files
- ============
-
- A header file is a file containing C declarations and macro
- definitions (*note Macros::.) to be shared between several source
- files. You request the use of a header file in your program with the
- C preprocessor command `#include'.
-
- * Menu:
-
- * Header Uses:: What header files are used for.
- * Include Syntax:: How to write `#include' commands.
- * Include Operation:: What `#include' does.
- * Once-Only:: Preventing multiple inclusion of one header file.
-
-
- File: cpp.info, Node: Header Uses, Next: Include Syntax, Prev: Header Files, Up: Header Files
-
- Uses of Header Files
- --------------------
-
- Header files serve two kinds of purposes.
-
- * System header files declare the interfaces to parts of the
- operating system. You include them in your program to supply
- the definitions you need to invoke system calls and libraries.
-
- * Your own header files contain declarations for interfaces
- between the source files of your program. Each time you have a
- group of related declarations and macro definitions all or most
- of which are needed in several different source files, it is a
- good idea to create a header file for them.
-
- Including a header file produces the same results in C compilation as
- copying the header file into each source file that needs it. But
- such copying would be time-consuming and error-prone. With a header
- file, the related declarations appear in only one place. If they
- need to be changed, they can be changed in one place, and programs
- that include the header file will automatically use the new version
- when next recompiled. The header file eliminates the labor of
- finding and changing all the copies as well as the risk that a
- failure to find one copy will result in inconsistencies within a
- program.
-
- The usual convention is to give header files names that end with `.h'.
-
-
- File: cpp.info, Node: Include Syntax, Next: Include Operation, Prev: Header Uses, Up: Header Files
-
- The `#include' Command
- ----------------------
-
- Both user and system header files are included using the preprocessor
- command `#include'. It has three variants:
-
- `#include <FILE>'
- This variant is used for system header files. It searches for a
- file named FILE in a list of directories specified by you, then
- in a standard list of system directories. You specify
- directories to search for header files with the command option
- `-I' (*note Invocation::.). The option `-nostdinc' inhibits
- searching the standard system directories; in this case only the
- directories you specify are searched.
-
- The parsing of this form of `#include' is slightly special
- because comments are not recognized within the `<...>'. Thus,
- in `#include <x/*y>' the `/*' does not start a comment and the
- command specifies inclusion of a system header file named
- `x/*y'. Of course, a header file with such a name is unlikely
- to exist on Unix, where shell wildcard features would make it
- hard to manipulate.
-
- The argument FILE may not contain a `>' character. It may,
- however, contain a `<' character.
-
- `#include "FILE"'
- This variant is used for header files of your own program. It
- searches for a file named FILE first in the current directory,
- then in the same directories used for system header files. The
- current directory is the directory of the current input file.
- It is tried first because it is presumed to be the location of
- the files that the current input file refers to. (If the `-I-'
- option is used, the special treatment of the current directory
- is inhibited.)
-
- The argument FILE may not contain `"' characters. If
- backslashes occur within FILE, they are considered ordinary text
- characters, not escape characters. None of the character escape
- sequences appropriate to string constants in C are processed.
- Thus, `#include "x\n\\y"' specifies a filename containing three
- backslashes. It is not clear why this behavior is ever useful,
- but the ANSI standard specifies it.
-
- `#include ANYTHING ELSE'
- This variant is called a "computed #include". Any `#include'
- command whose argument does not fit the above two forms is a
- computed include. The text ANYTHING ELSE is checked for macro
- calls, which are expanded (*note Macros::.). When this is done,
- the result must fit one of the above two variants.
-
- This feature allows you to define a macro which controls the
- file name to be used at a later point in the program. One
- application of this is to allow a site-configuration file for
- your program to specify the names of the system include files to
- be used. This can help in porting the program to various
- operating systems in which the necessary system header files are
- found in different places.
-
-
- File: cpp.info, Node: Include Operation, Next: Once-Only, Prev: Include Syntax, Up: Header Files
-
- How `#include' Works
- --------------------
-
- The `#include' command works by directing the C preprocessor to scan
- the specified file as input before continuing with the rest of the
- current file. The output from the preprocessor contains the output
- already generated, followed by the output resulting from the included
- file, followed by the output that comes from the text after the
- `#include' command. For example, given two files as follows:
-
- /* File program.c */
- int x;
- #include "header.h"
-
- main ()
- {
- printf (test ());
- }
-
-
- /* File header.h */
- char *test ();
-
- the output generated by the C preprocessor for `program.c' as input
- would be
-
- int x;
- char *test ();
-
- main ()
- {
- printf (test ());
- }
-
- Included files are not limited to declarations and macro definitions;
- they are merely the typical use. Any fragment of a C program can be
- included from another file. The include file could even contain the
- beginning of a statement that is concluded in the containing file, or
- the end of a statement that was started in the including file.
- However, a comment or a string or character constant may not start in
- the included file and finish in the including file. An unterminated
- comment, string constant or character constant in an included file is
- considered to end (with an error message) at the end of the file.
-
- The line following the `#include' command is always treated as a
- separate line by the C preprocessor even if the included file lacks a
- final newline.
-
-
- File: cpp.info, Node: Once-Only, Prev: Include Operation, Up: Header Files
-
- Once-Only Include Files
- -----------------------
-
- Very often, one header file includes another. It can easily result
- that a certain header file is included more than once. This may lead
- to errors, if the header file defines structure types or typedefs,
- and is certainly wasteful. Therefore, we often wish to prevent
- multiple inclusion of a header file.
-
- The standard way to do this is to enclose the entire real contents of
- the file in a conditional, like this:
-
- #ifndef __FILE_FOO_SEEN__
- #define __FILE_FOO_SEEN__
-
- THE ENTIRE FILE
-
- #endif /* __FILE_FOO_SEEN__ */
-
- The macro `__FILE_FOO_SEEN__' indicates that the file has been
- included once already; its name should begin with `__', and should
- contain the name of the file to avoid accidental conflicts.
-
- One drawback of this method is that the preprocessor must scan the
- input file completely in order to determine that all of it is to be
- ignored. This makes compilation slower. You can avoid the delay by
- inserting the following command near the beginning of file *in
- addition to the conditionals described above*:
-
- #pragma once
-
- This command tells the GNU C preprocessor to ignore any future
- commands to include the same file (whichever file the `#pragma'
- appears in).
-
- You should not *rely* on `#pragma once' to prevent multiple inclusion
- of the file. It is just a hint, and a nonstandard one at that. Most
- C compilers will ignore it entirely. For this reason, you still need
- the conditionals if you want to make certain that the file's contents
- are not included twice.
-
- Note that `#pragma once' works by file name; if a file has more than
- one name, it can be included once under each name, even in GNU CC,
- despite `#pragma once'.
-
-
- File: cpp.info, Node: Macros, Next: Conditionals, Prev: Header Files, Up: Top
-
- Macros
- ======
-
- A macro is a sort of abbreviation which you can define once and then
- use later. There are many complicated features associated with
- macros in the C preprocessor.
-
- * Menu:
-
- * Simple Macros:: Macros that always expand the same way.
- * Argument Macros:: Macros that accept arguments that are substituted
- into the macro expansion.
- * Predefined:: Predefined macros that are always available.
- * Stringification:: Macro arguments converted into string constants.
- * Concatenation:: Building tokens from parts taken from macro arguments.
- * Undefining:: Cancelling a macro's definition.
- * Redefining:: Changing a macro's definition.
- * Macro Pitfalls:: Macros can confuse the unwary. Here we explain
- several common problems and strange features.
-
-
- File: cpp.info, Node: Simple Macros, Next: Argument Macros, Prev: Macros, Up: Macros
-
- Simple Macros
- -------------
-
- A "simple macro" is a kind of abbreviation. It is a name which
- stands for a fragment of code.
-
- Before you can use a macro, you must "define" it explicitly with the
- `#define' command. `#define' is followed by the name of the macro
- and then the code it should be an abbreviation for. For example,
-
- #define BUFFER_SIZE 1020
-
- defines a macro named `BUFFER_SIZE' as an abbreviation for the text
- `1020'. Therefore, if somewhere after this `#define' command there
- comes a C statement of the form
-
- foo = (char *) xmalloc (BUFFER_SIZE);
-
- then the C preprocessor will recognize and "expand" the macro
- `BUFFER_SIZE', resulting in
-
- foo = (char *) xmalloc (1020);
-
- the definition must be a single line; however, it may not end in the
- middle of a multi-line string constant or character constant.
-
- The use of all upper case for macro names is a standard convention.
- Programs are easier to read when it is possible to tell at a glance
- which names are macros.
-
- Normally, a macro definition must be a single line, like all C
- preprocessor commands. (You can split a long macro definition
- cosmetically with Backslash-Newline.) There is one exception:
- Newlines can be included in the macro definition if within a string
- or character constant. By the same token, it is not possible for a
- macro definition to contain an unbalanced quote character; the
- definition automatically extends to include the matching quote
- character that ends the string or character constant. Comments
- within a macro definition may contain Newlines, which make no
- difference since the comments are entirely replaced with Spaces
- regardless of their contents.
-
- Aside from the above, there is no restriction on what can go in a
- macro body. Parentheses need not balance. The body need not
- resemble valid C code. (Of course, you might get error messages from
- the C compiler when you use the macro.)
-
- The C preprocessor scans your program sequentially, so macro
- definitions take effect at the place you write them. Therefore, the
- following input to the C preprocessor
-
- foo = X;
- #define X 4
- bar = X;
-
- produces as output
-
- foo = X;
-
- bar = 4;
-
- After the preprocessor expands a macro name, the macro's definition
- body is appended to the front of the remaining input, and the check
- for macro calls continues. Therefore, the macro body can contain
- calls to other macros. For example, after
-
- #define BUFSIZE 1020
- #define TABLESIZE BUFSIZE
-
- the name `TABLESIZE' when used in the program would go through two
- stages of expansion, resulting ultimately in `1020'.
-
- This is not at all the same as defining `TABLESIZE' to be `1020'.
- The `#define' for `TABLESIZE' uses exactly the body you specify--in
- this case, `BUFSIZE'--and does not check to see whether it too is the
- name of a macro. It's only when you *use* `TABLESIZE' that the
- result of its expansion is checked for more macro names. *Note
- Cascaded Macros::.
-
-
- File: cpp.info, Node: Argument Macros, Next: Predefined, Prev: Simple Macros, Up: Macros
-
- Macros with Arguments
- ---------------------
-
- A simple macro always stands for exactly the same text, each time it
- is used. Macros can be more flexible when they accept "arguments".
- Arguments are fragments of code that you supply each time the macro
- is used. These fragments are included in the expansion of the macro
- according to the directions in the macro definition.
-
- To define a macro that uses arguments, you write a `#define' command
- with a list of "argument names" in parentheses after the name of the
- macro. The argument names may be any valid C identifiers, separated
- by commas and optionally whitespace. The open-parenthesis must
- follow the macro name immediately, with no space in between.
-
- For example, here is a macro that computes the minimum of two numeric
- values, as it is defined in many C programs:
-
- #define min(X, Y) ((X) < (Y) ? (X) : (Y))
-
- (This is not the best way to define a ``minimum'' macro in GNU C.
- *Note Side Effects::, for more information.)
-
- To use a macro that expects arguments, you write the name of the
- macro followed by a list of "actual arguments" in parentheses.
- separated by commas. The number of actual arguments you give must
- match the number of arguments the macro expects. Examples of use of
- the macro `min' include `min (1, 2)' and `min (x + 28, *p)'.
-
- The expansion text of the macro depends on the arguments you use.
- Each of the argument names of the macro is replaced, throughout the
- macro definition, with the corresponding actual argument. Using the
- same macro `min' defined above, `min (1, 2)' expands into
-
- ((1) < (2) ? (1) : (2))
-
- where `1' has been substituted for `X' and `2' for `Y'.
-
- Likewise, `min (x + 28, *p)' expands into
-
- ((x + 28) < (*p) ? (x + 28) : (*p))
-
- Parentheses in the actual arguments must balance; a comma within
- parentheses does not end an argument. However, there is no
- requirement for brackets or braces to balance; thus, if you want to
- supply `array[x = y, x + 1]' as an argument, you must write it as
- `array[(x = y, x + 1)]', which is equivalent C code.
-
- After the actual arguments are substituted into the macro body, the
- entire result is appended to the front of the remaining input, and
- the check for macro calls continues. Therefore, the actual arguments
- can contain calls to other macros, either with or without arguments,
- or even to the same macro. The macro body can also contain calls to
- other macros. For example, `min (min (a, b), c)' expands into
-
- ((((a) < (b) ? (a) : (b))) < (c)
- ? (((a) < (b) ? (a) : (b)))
- : (c))
-
- (Line breaks shown here for clarity would not actually be generated.)
-
- If you use the macro name followed by something other than an
- open-parenthesis (after ignoring any spaces, tabs and comments that
- follow), it is not a call to the macro, and the preprocessor leaves
- the name unaltered. Therefore, it is possible for the same name to
- be a variable or function in your program as well as a macro, and you
- can choose in each instance whether to refer to the macro (if an
- actual argument list follows) or the variable or function (if an
- argument list does not follow).
-
- Such dual use of one name could be confusing and should be avoided
- except when the two meanings are effectively synonymous: that is,
- when the name is both a macro and a function and the two have similar
- effects. You can think of the name simply as a function; use of the
- name for purposes other than calling it (such as, to take the
- address) will refer to the function, while calls will expand the
- macro and generate better but equivalent code. For example, you can
- use a function named `min' in the same source file that defines the
- macro. If you write `&min' with no argument list, you refer to the
- function. If you write `min (x, bb)', with an argument list, the
- macro is expanded. If you write `(min) (a, bb)', where the name
- `min' is not followed by an open-parenthesis, the macro is not
- expanded, so you wind up with a call to the function `min'.
-
- It is not allowed to define the same name as both a simple macro and
- a macro with arguments.
-
- In the definition of a macro with arguments, the list of argument
- names must follow the macro name immediately with no space in
- between. If there is a space after the macro name, the macro is
- defined as taking no arguments, and all the rest of the name is taken
- to be the expansion. The reason for this is that it is often useful
- to define a macro that takes no arguments and whose definition begins
- with an identifier in parentheses. This rule about spaces makes it
- possible for you to do either this:
-
- #define FOO(x) - 1 / (x)
-
- (which defines `FOO' to take an argument and expand into minus the
- reciprocal of that argument) or this:
-
- #define BAR (x) - 1 / (x)
-
- (which defines `BAR' to take no argument and always expand into `(x)
- - 1 / (x)').
-
- Note that the *uses* of a macro with arguments can have spaces before
- the left parenthesis; it's the *definition* where it matters whether
- there is a space.
-
-
- File: cpp.info, Node: Predefined, Next: Stringification, Prev: Argument Macros, Up: Macros
-
- Predefined Macros
- -----------------
-
- Several simple macros are predefined. You can use them without
- giving definitions for them. They fall into two classes: standard
- macros and system-specific macros.
-
- * Menu:
-
- * Standard Predefined:: Standard predefined macros.
- * Nonstandard Predefined:: Nonstandard predefined macros.
-
-
- File: cpp.info, Node: Standard Predefined, Next: Nonstandard Predefined, Prev: Predefined, Up: Predefined
-
- Standard Predefined Macros
- ..........................
-
- The standard predefined macros are available with the same meanings
- regardless of the machine or operating system on which you are using
- GNU C. Their names all start and end with double underscores. Those
- preceding `__GNUC__' in this table are standardized by ANSI C; the
- rest are GNU C extensions.
-
- `__FILE__'
- This macro expands to the name of the current input file, in the
- form of a C string constant.
-
- `__BASE_FILE__'
- This macro expands to the name of the main input file, in the
- form of a C string constant. This is the source file that was
- specified as an argument when the C compiler was invoked.
-
- `__LINE__'
- This macro expands to the current input line number, in the form
- of a decimal integer constant. While we call it a predefined
- macro, it's a pretty strange macro, since its ``definition''
- changes with each new line of source code.
-
- This and `__FILE__' are useful in generating an error message to
- report an inconsistency detected by the program; the message can
- state the source line at which the inconsistency was detected.
- For example,
-
- fprintf (stderr, "Internal error: negative string length "
- "%d at %s, line %d.",
- length, __FILE__, __LINE__);
-
- A `#include' command changes the expansions of `__FILE__' and
- `__LINE__' to correspond to the included file. At the end of
- that file, when processing resumes on the input file that
- contained the `#include' command, the expansions of `__FILE__'
- and `__LINE__' revert to the values they had before the
- `#include' (but `__LINE__' is then incremented by one as
- processing moves to the line after the `#include').
-
- The expansions of both `__FILE__' and `__LINE__' are altered if
- a `#line' command is used. *Note Combining Sources::.
-
- `__DATE__'
- This macro expands to a string constant that describes the date
- on which the preprocessor is being run. The string constant
- contains eleven characters and looks like `"Jan 29 1987"' or
- `"Apr 1 1905"'.
-
- `__TIME__'
- This macro expands to a string constant that describes the time
- at which the preprocessor is being run. The string constant
- contains eight characters and looks like `"23:59:01"'.
-
- `__STDC__'
- This macro expands to the constant 1, to signify that this is
- ANSI Standard C. (Whether that is actually true depends on what
- C compiler will operate on the output from the preprocessor.)
-
- `__GNUC__'
- This macro is defined if and only if this is GNU C. This macro
- is defined only when the entire GNU C compiler is in use; if you
- invoke the preprocessor directly, `__GNUC__' is undefined.
-
- `__STRICT_ANSI__'
- This macro is defined if and only if the `-ansi' switch was
- specified when GNU C was invoked. Its definition is the null
- string. This macro exists primarily to direct certain GNU
- header files not to define certain traditional Unix constructs
- which are incompatible with ANSI C.
-
- `__VERSION__'
- This macro expands to a string which describes the version
- number of GNU C. The string is normally a sequence of decimal
- numbers separated by periods, such as `"1.18"'. The only
- reasonable use of this macro is to incorporate it into a string
- constant.
-
- `__OPTIMIZE__'
- This macro is defined in optimizing compilations. It causes
- certain GNU header files to define alternative macro definitions
- for some system library functions. It is unwise to refer to or
- test the definition of this macro unless you make very sure that
- programs will execute with the same effect regardless.
-
- `__CHAR_UNSIGNED__'
- This macro is defined if and only if the data type `char' is
- unsigned on the target machine. It exists to cause the standard
- header file `limit.h' to work correctly. It is bad practice to
- refer to this macro yourself; instead, refer to the standard
- macros defined in `limit.h'.
-
-
- File: cpp.info, Node: Nonstandard Predefined, Prev: Standard Predefined, Up: Predefined
-
- Nonstandard Predefined Macros
- .............................
-
- The C preprocessor normally has several predefined macros that vary
- between machines because their purpose is to indicate what type of
- system and machine is in use. This manual, being for all systems and
- machines, cannot tell you exactly what their names are; instead, we
- offer a list of some typical ones.
-
- Some nonstandard predefined macros describe the operating system in
- use, with more or less specificity. For example,
-
- `unix'
- `unix' is normally predefined on all Unix systems.
-
- `BSD'
- `BSD' is predefined on recent versions of Berkeley Unix (perhaps
- only in version 4.3).
-
- Other nonstandard predefined macros describe the kind of CPU, with
- more or less specificity. For example,
-
- `vax'
- `vax' is predefined on Vax computers.
-
- `mc68000'
- `mc68000' is predefined on most computers whose CPU is a
- Motorola 68000, 68010 or 68020.
-
- `m68k'
- `m68k' is also predefined on most computers whose CPU is a
- 68000, 68010 or 68020; however, some makers use `mc68000' and
- some use `m68k'. Some predefine both names. What happens in
- GNU C depends on the system you are using it on.
-
- `M68020'
- `M68020' has been observed to be predefined on some systems that
- use 68020 CPUs--in addition to `mc68000' and `m68k' that are
- less specific.
-
- `ns32000'
- `ns32000' is predefined on computers which use the National
- Semiconductor 32000 series CPU.
-
- Yet other nonstandard predefined macros describe the manufacturer of
- the system. For example,
-
- `sun'
- `sun' is predefined on all models of Sun computers.
-
- `pyr'
- `pyr' is predefined on all models of Pyramid computers.
-
- `sequent'
- `sequent' is predefined on all models of Sequent computers.
-
- These predefined symbols are not only nonstandard, they are contrary
- to the ANSI standard because their names do not start with underscores.
- Therefore, the option `-ansi' inhibits the definition of these symbols.
-
- This tends to make `-ansi' useless, since many programs depend on the
- customary nonstandard predefined symbols. Even system header files
- check them and will generate incorrect declarations if they do not
- find the names that are expected. You might think that the header
- files supplied for the Uglix computer would not need to test what
- machine they are running on, because they can simply assume it is the
- Uglix; but often they do, and they do so using the customary names.
- As a result, very few C programs will compile with `-ansi'. We
- intend to avoid such problems on the GNU system.
-
- What, then, should you do in an ANSI C program to test the type of
- machine it is to run on?
-
- GNU C offers a parallel series of symbols for this purpose, whose
- names are made from the customary ones by adding `__' at the
- beginning and end. Thus, the symbol `__vax__' would be available on
- a vax, and so on.
-
- The set of nonstandard predefined names in the GNU C preprocessor is
- controlled by the macro `CPP_PREDEFINES', which should be a string
- containing `-D' options, separated by spaces. For example, on the
- Sun 3, we use the following definition:
-
- #define CPP_PREDEFINES "-Dmc68000 -Dsun -Dunix -Dm68k"
-
-
- File: cpp.info, Node: Stringification, Next: Concatenation, Prev: Predefined, Up: Macros
-
- Stringification
- ---------------
-
- "Stringification" means turning a code fragment into a string
- constant whose contents are the text for the code fragment. For
- example, stringifying `foo (z)' results in `"foo (z)"'.
-
- In the C preprocessor, stringification is an option available when
- macro arguments are substituted into the macro definition. In the
- body of the definition, when an argument name appears, the character
- `#' before the name specifies stringification of the corresponding
- actual argument when it is substituted at that point in the
- definition. The same argument may be substituted in other places in
- the definition without stringification if the argument name appears
- in those places with no `#'.
-
- Here is an example of a macro definition that uses stringification:
-
- #define WARN_IF(EXP) \
- do { if (EXP) fprintf (stderr, "Warning: " #EXP "\n"); } while (0)
-
- Here the actual argument for `EXP' is substituted once as given, into
- the `if' statement, and once as stringified, into the argument to
- `fprintf'. The `do' and `while (0)' are a kludge to make it possible
- to write `WARN_IF (ARG);', which the resemblance of `WARN_IF' to a
- function would make C programmers want to do; *note Swallow
- Semicolon::.).
-
- The stringification feature is limited to transforming one macro
- argument into one string constant: there is no way to combine the
- argument with other text and then stringify it all together. But the
- example above shows how an equivalent result can be obtained in ANSI
- Standard C using the feature that adjacent string constants are
- concatenated as one string constant. The preprocessor stringifies
- `EXP''s actual argument into a separate string constant, resulting in
- text like
-
- do { if (x == 0) fprintf (stderr, "Warning: " "x == 0" "\n"); } while (0)
-
- but the C compiler then sees three consecutive string constants and
- concatenates them into one, producing effectively
-
- do { if (x == 0) fprintf (stderr, "Warning: x == 0\n"); } while (0)
-
- Stringification in C involves more than putting doublequote
- characters around the fragment; it is necessary to put backslashes in
- front of all doublequote characters, and all backslashes in string
- and character constants, in order to get a valid C string constant
- with the proper contents. Thus, stringifying `p = "foo\n";' results
- in `"p = \"foo\\n\";"'. However, backslashes that are not inside of
- string or character constants are not duplicated: `\n' by itself
- stringifies to `"\n"'.
-
- Whitespace (including comments) in the text being stringified is
- handled according to precise rules. All leading and trailing
- whitespace is ignored. Any sequence of whitespace in the middle of
- the text is converted to a single space in the stringified result.
-
-
- File: cpp.info, Node: Concatenation, Next: Undefining, Prev: Stringification, Up: Macros
-
- Concatenation
- -------------
-
- "Concatenation" means joining two strings into one. In the context
- of macro expansion, concatenation refers to joining two lexical units
- into one longer one. Specifically, an actual argument to the macro
- can be concatenated with another actual argument or with fixed text
- to produce a longer name. The longer name might be the name of a
- function, variable or type, or a C keyword; it might even be the name
- of another macro, in which case it will be expanded.
-
- When you define a macro, you request concatenation with the special
- operator `##' in the macro body. When the macro is called, after
- actual arguments are substituted, all `##' operators are deleted, and
- so is any whitespace next to them (including whitespace that was part
- of an actual argument). The result is to concatenate the syntactic
- tokens on either side of the `##'.
-
- Consider a C program that interprets named commands. There probably
- needs to be a table of commands, perhaps an array of structures
- declared as follows:
-
- struct command
- {
- char *name;
- void (*function) ();
- };
-
- struct command commands[] =
- {
- { "quit", quit_command},
- { "help", help_command},
- ...
- };
-
- It would be cleaner not to have to give each command name twice, once
- in the string constant and once in the function name. A macro which
- takes the name of a command as an argument can make this unnecessary.
- The string constant can be created with stringification, and the
- function name by concatenating the argument with `_command'. Here is
- how it is done:
-
- #define COMMAND(NAME) { #NAME, NAME ## _command }
-
- struct command commands[] =
- {
- COMMAND (quit),
- COMMAND (help),
- ...
- };
-
- The usual case of concatenation is concatenating two names (or a name
- and a number) into a longer name. But this isn't the only valid
- case. It is also possible to concatenate two numbers (or a number
- and a name, such as `1.5' and `e3') into a number. Also,
- multi-character operators such as `+=' can be formed by
- concatenation. In some cases it is even possible to piece together a
- string constant. However, two pieces of text that don't together
- form a valid lexical unit cannot be concatenated. For example,
- concatenation with `x' on one side and `+' on the other is not
- meaningful because those two characters can't fit together in any
- lexical unit of C. The ANSI standard says that such attempts at
- concatenation are undefined, but in the GNU C preprocessor it is well
- defined: it puts the `x' and `+' side by side with no particular
- special results.
-
- Keep in mind that the C preprocessor converts comments to whitespace
- before macros are even considered. Therefore, you cannot create a
- comment by concatenating `/' and `*': the `/*' sequence that starts a
- comment is not a lexical unit, but rather the beginning of a ``long''
- space character. Also, you can freely use comments next to a `##' in
- a macro definition, or in actual arguments that will be concatenated,
- because the comments will be converted to spaces at first sight, and
- concatenation will later discard the spaces.
-
-
- File: cpp.info, Node: Undefining, Next: Redefining, Prev: Concatenation, Up: Macros
-
- Undefining Macros
- -----------------
-
- To "undefine" a macro means to cancel its definition. This is done
- with the `#undef' command. `#undef' is followed by the macro name to
- be undefined.
-
- Like definition, undefinition occurs at a specific point in the
- source file, and it applies starting from that point. The name
- ceases to be a macro name, and from that point on it is treated by
- the preprocessor as if it had never been a macro name.
-
- For example,
-
- #define FOO 4
- x = FOO;
- #undef FOO
- x = FOO;
-
- expands into
-
- x = 4;
-
- x = FOO;
-
- In this example, `FOO' had better be a variable or function as well
- as (temporarily) a macro, in order for the result of the expansion to
- be valid C code.
-
- The same form of `#undef' command will cancel definitions with
- arguments or definitions that don't expect arguments. The `#undef'
- command has no effect when used on a name not currently defined as a
- macro.
-
-
- File: cpp.info, Node: Redefining, Next: Macro Pitfalls, Prev: Undefining, Up: Macros
-
- Redefining Macros
- -----------------
-
- "Redefining" a macro means defining (with `#define') a name that is
- already defined as a macro.
-
- A redefinition is trivial if the new definition is transparently
- identical to the old one. You probably wouldn't deliberately write a
- trivial redefinition, but they can happen automatically when a header
- file is included more than once (*note Header Files::.), so they are
- accepted silently and without effect.
-
- Nontrivial redefinition is considered likely to be an error, so it
- provokes a warning message from the preprocessor. However, sometimes
- it is useful to change the definition of a macro in mid-compilation.
- You can inhibit the warning by undefining the macro with `#undef'
- before the second definition.
-
- In order for a redefinition to be trivial, the new definition must
- exactly match the one already in effect, with two possible exceptions:
-
- * Whitespace may be added or deleted at the beginning or the end.
-
- * Whitespace may be changed in the middle (but not inside strings).
- However, it may not be eliminated entirely, and it may not be
- added where there was no whitespace at all.
-
- Recall that a comment counts as whitespace.
-
-
- File: cpp.info, Node: Macro Pitfalls, Prev: Redefining, Up: Macros
-
- Pitfalls and Subtleties of Macros
- ---------------------------------
-
- In this section we describe some special rules that apply to macros
- and macro expansion, and point out certain cases in which the rules
- have counterintuitive consequences that you must watch out for.
-
- * Menu:
-
- * Misnesting:: Macros can contain unmatched parentheses.
- * Macro Parentheses:: Why apparently superfluous parentheses
- may be necessary to avoid incorrect grouping.
- * Swallow Semicolon:: Macros that look like functions
- but expand into compound statements.
- * Side Effects:: Unsafe macros that cause trouble when
- arguments contain side effects.
- * Self-Reference:: Macros whose definitions use the macros' own names.
- * Argument Prescan:: Actual arguments are checked for macro calls
- before they are substituted.
- * Cascaded Macros:: Macros whose definitions use other macros.
-
-
- File: cpp.info, Node: Misnesting, Next: Macro Parentheses, Prev: Macro Pitfalls, Up: Macro Pitfalls
-
- Improperly Nested Constructs
- ............................
-
- Recall that when a macro is called with arguments, the arguments are
- substituted into the macro body and the result is checked, together
- with the rest of the input file, for more macro calls.
-
- It is possible to piece together a macro call coming partially from
- the macro body and partially from the actual arguments. For example,
-
- #define double(x) (2*(x))
- #define call_with_1(x) x(1)
-
- would expand `call_with_1 (double)' into `(2*(1))'.
-
- Macro definitions do not have to have balanced parentheses. By
- writing an unbalanced open parenthesis in a macro body, it is
- possible to create a macro call that begins inside the macro body but
- ends outside of it. For example,
-
- #define strange(file) fprintf (file, "%s %d",
- ...
- strange(stderr) p, 35)
-
- This bizarre example expands to `fprintf (stderr, "%s %d", p, 35)'!
-
-
- File: cpp.info, Node: Macro Parentheses, Next: Swallow Semicolon, Prev: Misnesting, Up: Macro Pitfalls
-
- Unintended Grouping of Arithmetic
- .................................
-
- You may have noticed that in most of the macro definition examples
- shown above, each occurrence of a macro argument name had parentheses
- around it. In addition, another pair of parentheses usually surround
- the entire macro definition. Here is why it is best to write macros
- that way.
-
- Suppose you define a macro as follows,
-
- #define ceil_div(x, y) (x + y - 1) / y
-
- whose purpose is to divide, rounding up. (One use for this operation
- is to compute how many `int''s are needed to hold a certain number of
- `char''s.) Then suppose it is used as follows:
-
- a = ceil_div (b & c, sizeof (int));
-
- This expands into
-
- a = (b & c + sizeof (int) - 1) / sizeof (int);
-
- which does not do what is intended. The operator-precedence rules of
- C make it equivalent to this:
-
- a = (b & (c + sizeof (int) - 1)) / sizeof (int);
-
- But what we want is this:
-
- a = ((b & c) + sizeof (int) - 1)) / sizeof (int);
-
- Defining the macro as
-
- #define ceil_div(x, y) ((x) + (y) - 1) / (y)
-
- provides the desired result.
-
- However, unintended grouping can result in another way. Consider
- `sizeof ceil_div(1, 2)'. That has the appearance of a C expression
- that would compute the size of the type of `ceil_div (1, 2)', but in
- fact it means something very different. Here is what it expands to:
-
- sizeof ((1) + (2) - 1) / (2)
-
- This would take the size of an integer and divide it by two. The
- precedence rules have put the division outside the `sizeof' when it
- was intended to be inside.
-
- Parentheses around the entire macro definition can prevent such
- problems. Here, then, is the recommended way to define `ceil_div':
-
- #define ceil_div(x, y) (((x) + (y) - 1) / (y))
-
-
- File: cpp.info, Node: Swallow Semicolon, Next: Side Effects, Prev: Macro Parentheses, Up: Macro Pitfalls
-
- Swallowing the Semicolon
- ........................
-
- Often it is desirable to define a macro that expands into a compound
- statement. Consider, for example, the following macro, that advances
- a pointer (the argument `p' says where to find it) across whitespace
- characters:
-
- #define SKIP_SPACES (p, limit) \
- { register char *lim = (limit); \
- while (p != lim) { \
- if (*p++ != ' ') { \
- p--; break; }}}
-
- Here Backslash-Newline is used to split the macro definition, which
- must be a single line, so that it resembles the way such C code would
- be laid out if not part of a macro definition.
-
- A call to this macro might be `SKIP_SPACES (p, lim)'. Strictly
- speaking, the call expands to a compound statement, which is a
- complete statement with no need for a semicolon to end it. But it
- looks like a function call. So it minimizes confusion if you can use
- it like a function call, writing a semicolon afterward, as in
- `SKIP_SPACES (p, lim);'
-
- But this can cause trouble before `else' statements, because the
- semicolon is actually a null statement. Suppose you write
-
- if (*p != 0)
- SKIP_SPACES (p, lim);
- else ...
-
- The presence of two statements--the compound statement and a null
- statement--in between the `if' condition and the `else' makes invalid
- C code.
-
- The definition of the macro `SKIP_SPACES' can be altered to solve
- this problem, using a `do ... while' statement. Here is how:
-
- #define SKIP_SPACES (p, limit) \
- do { register char *lim = (limit); \
- while (p != lim) { \
- if (*p++ != ' ') { \
- p--; break; }}} \
- while (0)
-
- Now `SKIP_SPACES (p, lim);' expands into
-
- do {...} while (0);
-
- which is one statement.
-
-
- File: cpp.info, Node: Side Effects, Next: Self-Reference, Prev: Swallow Semicolon, Up: Macro Pitfalls
-
- Duplication of Side Effects
- ...........................
-
- Many C programs define a macro `min', for ``minimum'', like this:
-
- #define min(X, Y) ((X) < (Y) ? (X) : (Y))
-
- When you use this macro with an argument containing a side effect, as
- shown here,
-
- next = min (x + y, foo (z));
-
- it expands as follows:
-
- next = ((x + y) < (foo (z)) ? (x + y) : (foo (z)));
-
- where `x + y' has been substituted for `X' and `foo (z)' for `Y'.
-
- The function `foo' is used only once in the statement as it appears
- in the program, but the expression `foo (z)' has been substituted
- twice into the macro expansion. As a result, `foo' might be called
- two times when the statement is executed. If it has side effects or
- if it takes a long time to compute, the results might not be what you
- intended. We say that `min' is an "unsafe" macro.
-
- The best solution to this problem is to define `min' in a way that
- computes the value of `foo (z)' only once. The C language offers no
- standard way to do this, but it can be done with GNU C extensions as
- follows:
-
- #define min(X, Y) \
- ({ typeof (X) __x = (X), __y = (Y); \
- (__x < __y) ? __x : __y; })
-
- If you do not wish to use GNU C extensions, the only solution is to
- be careful when *using* the macro `min'. For example, you can
- calculate the value of `foo (z)', save it in a variable, and use that
- variable in `min':
-
- #define min(X, Y) ((X) < (Y) ? (X) : (Y))
- ...
- {
- int tem = foo (z);
- next = min (x + y, tem);
- }
-
- (where I assume that `foo' returns type `int').
-
-
-